package sms

import (
	"encoding/json"
	"gohub/pkg/logger"

	aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate"
)

const TAG string = "短信[阿里云]"

type Aliyun struct{}

func (s *Aliyun) Send(phone string, message Message, config map[string]string) bool {
	// 接口客户端
	client := aliyunsmsclient.New("http://dysmsapi.aliyuncs.com/")

	// 接口参数
	params, err := json.Marshal(message.Data)
	if err != nil {
		logger.ErrorString(TAG, "解析绑定错误", err.Error())
		return false
	}

	logger.DebugJSON(TAG, "配置信息", config)

	response, err := client.Execute(
		config["access_key_id"],
		config["access_key_secret"],
		phone,
		config["sign_name"],
		message.Template,
		string(params),
	)

	logger.DebugJSON(TAG, "请求内容", client.Request)
	logger.DebugJSON(TAG, "接口响应", response)

	if err != nil {
		logger.DebugJSON(TAG, "发信失败", err.Error())
		return false
	}

	ret, err := json.Marshal(response)
	if err != nil {
		logger.DebugJSON(TAG, "解析响应 JSON 错误", err.Error())
		return false
	}

	if response.IsSuccessful() {
		logger.DebugJSON(TAG, "发信成功", "")
		return true
	} else {
		logger.DebugJSON(TAG, "服务商返回错误", string(ret))
	}

	return false
}
